package com.example.demo.utils;

import java.lang.reflect.Field;
import java.util.Map;

/**
 * 反射字段的方法
 * 说明 可以用来接收多个要传入的对象值的方法
 * zwj
 */
public class Reflection {
    /**
     * 按照映射顺序设置对象属性值
     * @param target 目标对象
     * @param valueMap 有序的属性名-值映射
     */
    public static void setValuesInOrder(Object target, Map<String, Object> valueMap) {
        Class<?> clazz = target.getClass();

        try {
            for (Map.Entry<String, Object> entry : valueMap.entrySet()) {
                //私有的字段名和值
                String fieldName = entry.getKey();
                Object value = entry.getValue();

                // 获取字段（包括私有字段）
                Field field = clazz.getDeclaredField(fieldName);
                field.setAccessible(true); // 允许访问私有字段

                // 设置字段值
                field.set(target, value);
            }
        } catch (NoSuchFieldException | IllegalAccessException e) {
            throw new RuntimeException("Error setting field values", e);
        }
    }
}
